\documentclass[11pt,a4paper]{article}

\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[top=3cm,bottom=2cm,left=2cm,right=2cm]{geometry}
\usepackage{fancyhdr}
\usepackage{graphicx}

\pagestyle{fancy}
\lhead{Projet de compilation}
\rhead{\og Rubic \fg}
\renewcommand{\headrulewidth}{1px}
\lfoot{\bsc{Enseirb-Matmeca}}
\rfoot{\bsc{Informatique I2}}
\renewcommand{\footrulewidth}{1px}

%%%%%%%%%%%%%%%% Variables %%%%%%%%%%%%%%%%
\def\projet{Projet de compilation}
\def\membres{Bastien MEUNIER, Joffrey DIEBOLD}
\title{Projet de compilation}
\begin{document}

%%%%%%%%%%%%%%%% Header %%%%%%%%%%%%%%%%
  \begin{figure}[h!]
		\begin{center}
                        \fbox{\begin{tabular}{l}
                            {\bfseries \sffamily
                              \projet} \\
                            {\bfseries \sffamily
                              Membres :} \membres
                        \end{tabular}}
			\title{
			\Huge \textbf{Projet de compilation\\\og Rubic \fg}}                     
			\maketitle
         \includegraphics[scale=0.13]{logo-enseirb.png}\\
			ENSEIRB-MATMECA\\
			1 Avenue du docteur Albert Schweitzer \\
			33402 Talence Cedex\\
                        \noindent    
                        \vskip 0mm
                        \noindent
                        \vskip 4mm ~
		\end{center}
  \end{figure}
  
\newpage

\tableofcontents

\newpage

\section*{Introduction}
\addcontentsline{toc}{section}{Introduction}

Le but de ce projet est de réaliser un compilateur d'un langage objet proche du language Ruby, nommé Rubic. Le langage sera compilé en du code intermédiaire du compilateur LLVM. L'appel au compilateur LLVM permettra ainsi de finir la compilation en binaire et de générer du code efficace.

\section{Structures utilisées}

$$
enum\ toutLesTypes \left\{
\begin{array}{ll}
  PARAMETRE, INTEG, STR, FLOA, BOOL,\\ UINTEG, VOID, FONCTION, UNDEF;
\end{array}
\right.
$$

$$
struct\ variable \left\{
    \begin{array}{ll}
        char*\ nom;\\
        int*\ probType;\\
        unType\ type;
    \end{array}
\right.
$$

$$
struct\ function \left\{
  \begin{array}{ll}
    char*\ nom;\\
    node*\ parametres;\\
    unType\ type;
    \end{array}
\right.
$$

$$
struct\ instruction\left\{
\begin{array}{ll}
  char*\ fonction;\\
  node*\ parametres;\\
  variable*\ retour;\\
  instruction*\ next;
\end{array}
\right.
$$

$$
struct\ node\left\{
  \begin{array}{ll}
    struct\ node*\ nSuiv;\\
    union\left\{
    \begin{array}{ll}
    variable*\ v;\\
    function*\ f;
    \end{array}
    \right.
    \end{array}
  \right.
$$

\section{Fonctions utilisées}
$$
node*\ creerNode(node*\ nSuiv,\ char*\ nomVar,\ unType\ type);
$$

$$
variable*\ empty\_var();
$$

$$
void\ deleteInstr(instruction*\ i);
$$

$$
instruction*\ empty\_instr();
$$

$$
node*\ chercheNode(char*\ nom,\ node*\ liste);
$$

$$
int\ operation(char*\ op,\ variable*\ a,\ variable*\ b,\ variable*\ retour);
$$

$$
instruction*\ generiqueOp(char*\ op,\ variable*\ a,\ variable*\ b,\ variable*\ retour);
$$

$$
void\ ecrireFonction();
$$

\section{Trucs à dire(je les notes pour pas oublié)}

Essayer d'implémenter table de hachage.

Comme en C, on considère qu'une valeur, comme un int ou un float, vaut 1 dans les comparaison logiques.

Ajout d'une nouvelle règle dans le if then else. En effet cela sert a utiliser du code lorsqu'il est écrit ``if ... hen'', sinon on a un conflit.

Boucle for ne gère pas le cas \og expr1 $>$ expr2 \fg. Pour l'instant ça ne sert à rien de s'attarder mais penser à le mentionner ou ajouter une gestion d'erreur robuste d'ici la fin.
Toujours pour le for, la variable passé doit être undef. Essayer de penser jeudi a demander au prof le comportement du programme si on pase un int.

Contrairement a beaucoup de groupe nous avons compris que nous faisions un compilateur qui n'a pas besoin de lire la valeur des données. Nous les stockons donc toutes dans des chaines de caractères.

On a essayer de réduire le plus possibles les fuites mémoires. (Eventuellement vérifier avec valgrind pour avoir des chiffres. Sinon souligner les free pour chaque malloc et... evidemment faire gaffe de pas laisser une grosse fuite mémoire!)

gérer dans opt\_params le cas ou il n'y a pas de parenthèses.
\section*{Conclusion}
\addcontentsline{toc}{section}{Conclusion}

\end{document}
